본문으로 건너뛰기

전역변수의 문제점

작성일 : 2024.10.13

지역변수의 생명 주기​

  • 지역 변수의 생명 주기는 함수의 생명주기와 일치한다
  • 호이스팅은 스코프를 단위로 동작한다
  • 호이스팅 : 변수 선언이 스코프의 선두로 끌어올려진 것처럼 동작하는 js 고유의 특징

전역변수의 생명주기​

  • 전역변수의 생명주기는 전역 객체의 생명주기와 일치
  • 전역 객체 : 코드가 실행되기 이전단계에 js엔진에 의해 어떤 객체들보다도 먼저 생성되는 객체
    • client : window객체
    • server : global객체
    • 전역 객체는 표준 빌트인 객체와 환경에 따른 호스트 객체, 그리고 var 키워드로 선언한 전역 변수와 전역 함수를 프로퍼티로 가진다.
  • var 키워드로 선언한 전역 변수의 생명 주기는 전역 객체의 생명 주기와 일치

전역 변수의 문제점​

  1. 암묵적 결합
    • 암묵적 결합 : 모든 코드가 전역변수를 참조하고 변경할 수 있음
  2. 긴 생명주기
  3. 스코프 체인 상의 종점에 존재
    • 전역 변수의 검색 속도가 가장 느리다.
  4. 네임스페이스 오염

전역 변수의 사용을 억제하는 방법​

  • 전역변수를 반드시 사용해야 할 이유를 찾지 못한다면 지역 변수를 사용해야 한다.
  • 변수의 스코프는 좁을수록 좋다
  • 즉시 실행 함수 사용
    • 모든 코드를 즉시 실행함수로 감싸면 모든 변수는 즉시 실행 함수의 지역변수가 된다
    • 이 방법은 라이브러리 등에 자주 사용
  • 네임스페이스 객체
    • 전역에 네임스페이스 역할을 담당할 객체를 생성하고 전역 변수처럼 사용하고 싶은 변수를 프로퍼티로 추가하는 방법
    • 네임스페이스 객체에 또다른 네임스페이스 객체를 프로퍼티로 추가하여 네임스페이스를 계층적으로 구성할 수 있음
  • 모듈 패턴
    • 클래스르 모방하여 관련이 있는 변수와 함수를 모아 즉시 실행 함수로 감싸 하나의 모듈로 만든다.
  • ES6 모듈
    • ES6모듈은 파일 자체의 독자적인 모듈 스코프를 제공
    • script 태그에 type="module" 속성을 추가하면 로드된 js 파일은 모듈로 동작